//
//  HMTabBar.swift
//  Swift3.0_Micro-blog-Sina
//
//  Created by Apple on 16/10/22.
//  Copyright © 2016年 Apple. All rights reserved.
//

import UIKit
// 声明协议
//protocol HMTabBarDelegate: NSObjectProtocol {
//    // 协议方法
//    func composeButtonClickOfTabBar()
//}

class HMTabBar: UITabBar {
    // 01-定义一个闭包(撰写按钮使用)
    var closure: (()->())?
    
    // 定义一个代理属性
    // 如果用 weak 修饰 协议需要继承NSObjectProtocol
//    weak var hmDelegate: HMTabBarDelegate?
    
    // 几乎所有继承 UIView 的类构造函数均为是 init(frame)
    // 如果init(frame) 就代表你要用手写代码方式创建该类
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    /*
        required  - 必须的
        - 如果你使用手写代码来创建这个类 就必须实现该方法
        - 如果你定义了手写代码创建该类 但是你的同事不知道 他使用 sb || xib 类使用你的类 那么就会走这个方法
        - fatalError("init(coder:) has not been implemented") 不能完成创建
        - fatalError 断言
     */
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
//        // 支持了 xib
//        super.init(coder: aDecoder)
//        setupUI()
    }
    
    // MARK: - 监听方法
    /*
        - @objc private
        - Swift 静态型语言
        - OC 运行时语言
        - Swift 运行循环时候 根本找不到该方法(按钮点击时候)
        - OC 运行时 使用 kvc 动态派发的方式调用该方法 所以在 Swift 中 如果方法私有后 需要@objc 告知系统 使用 OC 消息运行时来调用
     */
    @objc private func buttonClick(){
//        hmDelegate?.composeButtonClickOfTabBar()
        // 03- 执行闭包
        closure?()
    }
    
    // MARK: - 设置视图
    private func setupUI(){
        // 添加控件
        addSubview(composeButton)
    }
    /*
     UITabBarButton 该什么
        - 宽度
        - 设置 x 坐标
     */
    override func layoutSubviews() {
        super.layoutSubviews()
        //UITabBarButton 宽度
        let w = HMSCREENW * 0.2
        var index: CGFloat = 0
        // 遍历subviews
        for value in subviews{
            // 判断是否是我们想要的UITabBarButton
            //UITableViewCell.self  == [UITableViewCell class]
            // 判断 class 一致
            if value.isKind(of: NSClassFromString("UITabBarButton")!) {
                // 设置 x 和 w
                value.frame.size.width = w
                value.frame.origin.x = index * w
//                index = index + 1   == index += 1
                index += 1
                // 为了给撰写按钮留个位置
                if index == 2 {
                    index += 1
                }
            }
        }
        // 设置撰写按钮的 frame
        composeButton.center.x = HMSCREENW * 0.5
        composeButton.center.y = frame.size.height * 0.5
    }
    
    // MARK: - 懒加载控件
    // 撰写按钮
    lazy var composeButton: UIButton = {
        let button = UIButton(setImgName: "tabbar_compose_icon_add", backgroundImgName: "tabbar_compose_button", target: self, action: #selector(buttonClick))
//        // 添加点击事件
//        button.addTarget(self, action: #selector(buttonClick), for: UIControlEvents.touchUpInside)
//        // 设置 image
//        button.setImage(UIImage(named: "tabbar_compose_icon_add"), for: UIControlState.normal)
//        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), for: UIControlState.highlighted)
//        // 设置背景图片
//        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), for: UIControlState.normal)
//        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), for: UIControlState.highlighted)
//        button.sizeToFit()
        return button
    }()
}
